#include <map>
#include <iostream>
#include <string>

#include <Mesh.hpp>
#include <Camera.hpp>
#include <Light.hpp>
#include <Material.hpp>

#ifndef _CLASSMODELINGROOT_
#define _CLASSMODELINGROOT_

namespace Modeling {

class Root : public Modeling::Node
{
public:
	~Root();
	Root();
	Root(std::string filename);

	virtual void animate(unsigned int frame);
	int type();

	Modeling::Node* getNode(std::string name);
	void addNode(std::string parent, Modeling::Node* node);
	unsigned int getNodesQty();

	virtual Modeling::Mesh* addMesh(std::string parent, std::string name);
	virtual Modeling::Camera* addCamera(std::string parent, std::string name);
	virtual Modeling::Light* addLight(std::string parent, std::string name);

	virtual Modeling::Material* getMaterial(std::string name);
	virtual Modeling::Material* addMaterial(std::string name);
	unsigned int getMaterialsQty();
	std::map< std::string, Modeling::Material* >* getMaterialMap();

protected:
	std::map< std::string, Modeling::Material* > material;
	std::map< std::string, Modeling::Node* > node;
};

}// namespace Modeling

#endif
